﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AccesoBD;
using System.Data.SqlClient;
using CapaLogica.CL.UtilidadesGenerales;



namespace CapaLogica.CL.PeriodoLectivo
{
    public class PeriodoPersistente
    {
        private AcessoBD _acceso = new AcessoBD();

        internal PeriodoPersistente()
        {

        }


        /// <summary>
        /// Método de la clase encargada de insertar un nuevo PeriodoLectivo a la DB 
        /// </summary>
        /// <param name="pFechaInicio">pFechaInicio, tipo DateTime</param>
        /// <param name="pFechaFin">pFechaFin, tipo DateTime</param>
        /// <param name="pUsuario">Usuario que realiza la accion, tipo int</param>
        /// <remarks></remarks>
        public void insertarPeriodoLectivo(CL_PeriodoLectivo pPeriodo, int pIdUsuario)
        {
            //instanciar a la clase de Parametro e indicar el tamaño del arreglo... (parámetros)
                Parametros[] parametros = new Parametros[2];
                string sql = @"insert into dbo.T_Periodo_Lectivo(fecha_inicio, fecha_fin)
                                values(param1 , param2);";  
                parametros[0] = new Parametros(pPeriodo.FechaInicio, "param1");
                parametros[1] = new Parametros(pPeriodo.FechaFin, "param2");
                try
                {
                    //invocar y ejecutar...
                  pPeriodo.Id = _acceso.executeSQLInsert(sql, parametros);
                  if (pPeriodo.Id != -1)
                  {
                      Modulo.insertarBitacora(pIdUsuario, "Creación de un nuevo Periodo Lectivo", pPeriodo.Id, 7, 1);
                  }
                  else
                  {
                      throw new Exception("Ha habido un error al abrir el Periodo Lectivo.");
                  }
                 

                }
                catch (Exception ex)
                {
                    throw ex;
                }
            

        }


        /// <summary>
        /// Método que se encarga de conseguir el periodo actual de la bd
        /// </summary>
        /// <remarks></remarks>
        public CL_PeriodoLectivo obtenerPeriodoActual()
            {
               
                string psp = "sp_obtener_Periodo_Actual";
                SqlDataReader reader;
                CL_PeriodoLectivo periodo = null;
                Parametros[] parametros = null;
                try
                {
                    //invocar y ejecutar...
                  reader =  _acceso.execute_SP_Consulta(psp, parametros);

                  if (reader.Read())
                  {
                      periodo = new CL_PeriodoLectivo(reader.GetInt32(0),
                                                    reader.GetDateTime(1),
                                                    reader.GetDateTime(1));
                  }
                  
                  reader.Close();
                  return periodo;
                }
                catch (Exception ex)
                {
                    throw ex;
                }

        }


        /// <summary>
        /// Método que se encarga de conseguir el periodo actual de la bd
        /// <param name="pPeriodoo">El periodo lectivo que se va a cerrar, tipo PeriodoLectivo</param>
        /// <param name="pUsuario">Usuario que realiza la accion, tipo int</param>
        /// </summary>
        /// <remarks></remarks>
        public void cerrarPeriodoLectivo(CL_PeriodoLectivo pPeriodo, int pIdUsuario)
        {

            String psp = "dbo.sp_cerrar_periodo_lectivo ";
            Parametros[] _params = new Parametros[2];

            _params[0] = new Parametros(pPeriodo.Id, "idPeriodo");
            _params[1] = new Parametros(pIdUsuario, "idUsuario");

            try
            {
                _acceso.execute_SP_Consulta(psp, _params);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }


    }
}
